home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-installer.exe / bin / quodlibet / qltk / lyrics.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  5KB  |  127 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. import os
  5. import threading
  6. import urllib
  7. from gi.repository import Gtk, GLib
  8. from quodlibet import const
  9. from quodlibet import qltk
  10. from quodlibet import util
  11. from quodlibet.util import connect_obj
  12.  
  13. class LyricsPane(Gtk.VBox):
  14.     
  15.     def __init__(self, song):
  16.         super(LyricsPane, self).__init__(spacing = 12)
  17.         self.set_border_width(12)
  18.         view = Gtk.TextView()
  19.         sw = Gtk.ScrolledWindow()
  20.         sw.add(view)
  21.         refresh = qltk.Button(_('_Download'), Gtk.STOCK_CONNECT)
  22.         save = Gtk.Button(stock = Gtk.STOCK_SAVE)
  23.         delete = Gtk.Button(stock = Gtk.STOCK_DELETE)
  24.         add = Gtk.Button(stock = Gtk.STOCK_EDIT)
  25.         view.set_wrap_mode(Gtk.WrapMode.WORD)
  26.         sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
  27.         lyricname = song.lyric_filename
  28.         buffer = view.get_buffer()
  29.         refresh.connect('clicked', self._LyricsPane__refresh, add, buffer, song)
  30.         save.connect('clicked', self._LyricsPane__save, lyricname, buffer, delete)
  31.         delete.connect('clicked', self._LyricsPane__delete, lyricname, save)
  32.         add.connect('clicked', self._LyricsPane__add, song)
  33.         sw.set_shadow_type(Gtk.ShadowType.IN)
  34.         self.pack_start(sw, True, True, 0)
  35.         bbox = Gtk.HButtonBox()
  36.         bbox.pack_start(save, True, True, 0)
  37.         bbox.pack_start(delete, True, True, 0)
  38.         bbox.pack_start(add, True, True, 0)
  39.         self.pack_start(bbox, False, True, 0)
  40.         save.set_sensitive(False)
  41.         add.set_sensitive(True)
  42.         if os.path.exists(lyricname):
  43.             buffer.set_text(file(lyricname).read())
  44.         else:
  45.             buffer.set_text(_('No lyrics found for this song.'))
  46.         connect_obj(buffer, 'changed', save.set_sensitive, True)
  47.  
  48.     
  49.     def __add(self, add, song):
  50.         artist = song.comma('artist').encode('utf-8')
  51.         util.website('http://lyricwiki.org/%s' % urllib.quote(artist))
  52.  
  53.     
  54.     def __refresh(self, refresh, add, buffer, song):
  55.         buffer.set_text(_('Searching for lyrics...'))
  56.         refresh.set_sensitive(False)
  57.         thread = threading.Thread(target = self._LyricsPane__search, args = (song, buffer, refresh, add))
  58.         thread.setDaemon(True)
  59.         thread.start()
  60.  
  61.     
  62.     def __search(self, song, buffer, refresh, add):
  63.         artist = song.comma('artist')
  64.         title = song.comma('title')
  65.         
  66.         try:
  67.             sock = urllib.urlopen('http://lyricwiki.org/api.php?client=QuodLibet&func=getSong&artist=%s&song=%s&fmt=text' % (urllib.quote(artist.encode('utf-8')), urllib.quote(title.encode('utf-8'))))
  68.             text = sock.read()
  69.         except Exception:
  70.             err = None
  71.             
  72.             try:
  73.                 err = err.strerror.decode(const.ENCODING, 'replace')
  74.             except:
  75.                 err = _('Unable to download lyrics.')
  76.  
  77.             GLib.idle_add(buffer.set_text, err)
  78.             return None
  79.  
  80.         sock.close()
  81.         if text == 'Not found':
  82.             GLib.idle_add(buffer.set_text, _('No lyrics found for this song.'))
  83.             return None
  84.         None.idle_add(buffer.set_text, text)
  85.         GLib.idle_add(refresh.set_sensitive, True)
  86.  
  87.     
  88.     def __save(self, save, lyricname, buffer, delete):
  89.         
  90.         try:
  91.             os.makedirs(os.path.dirname(lyricname))
  92.         except EnvironmentError:
  93.             err = None
  94.  
  95.         
  96.         try:
  97.             f = file(lyricname, 'w')
  98.         except EnvironmentError:
  99.             err = None
  100.             print_w(err.strerror.decode(const.ENCODING, 'replace'))
  101.  
  102.         (start, end) = buffer.get_bounds()
  103.         f.write(buffer.get_text(start, end, True))
  104.         f.close()
  105.         delete.set_sensitive(True)
  106.         save.set_sensitive(False)
  107.  
  108.     
  109.     def __delete(self, delete, lyricname, save):
  110.         
  111.         try:
  112.             os.unlink(lyricname)
  113.         except EnvironmentError:
  114.             pass
  115.  
  116.         lyricname = os.path.dirname(lyricname)
  117.         
  118.         try:
  119.             os.rmdir(lyricname)
  120.         except EnvironmentError:
  121.             pass
  122.  
  123.         delete.set_sensitive(False)
  124.         save.set_sensitive(True)
  125.  
  126.  
  127.